package br.com.sgdee.mb;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.faces.bean.ManagedBean;
import javax.persistence.PersistenceException;

import br.com.sgdee.bo.remote.PessoaBORemote;
import br.com.sgdee.dto.PessoaDTO;
import br.com.sgdee.entidades.acesso.Pessoa;
import br.com.sgdee.mb.generic.GenericoBean;

@ManagedBean
@RequestScoped
public class ManterPessoaMB extends GenericoBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 8279017841737710090L;
	
	
	private final String PATH_MANTER_PESSOA = "manterPessoa";
	
	private final String PATH_LISTAR_PESSOAS = "listarPessoas";
	
	
	@EJB private PessoaBORemote pessoaBO;
	
	
	private PessoaDTO filtro;
	
	private Pessoa pessoa;
	
	private List<Pessoa> listaPessoas;
	
	
	/**
	 * Método inicial do Managed Bean.
	 * Também utilizado como método
	 * 
	 */
	public void init() {
		
		carregarListaPessoas();
	}
	
	
	/**
	 * Método público que recarrega a lista de pessoas cadastradas
	 * 
	 */
	public void recuperarListaPessoas() {
		
		carregarListaPessoas();
	}
	
	
	/**
	 * Método privado na qual carrega a lista de pessoas cadastradas
	 * 
	 */
	private void carregarListaPessoas() {
		
		try {
			
			getListaPessoas().clear();
			
			setListaPessoas(this.pessoaBO.recuperarTodosFiltro(getFiltro()));
			
		} catch (PersistenceException e) {
			
//			LOG.error("Erro ao pesquisar Pessoas.", e);
		}
	}
	

	/* ===================================
	 * 		Métodos de Comandos
	 * ===================================*/
	/**
	 * Métodos pesquisar pessoas
	 * 
	 */
	public void pesquisarPessoas() {
		
		carregarListaPessoas();
		
	}
	
	
	/**
	 * Método que valida e grava os dados no banco de dados
	 * 
	 */
	public void comandoSalvar() {
		
		
	}
	
	
	/**
	 * Método de cadastrar pessoas
	 * 
	 * @return
	 */
	public String comandoCadastrar() {
		
		return PATH_MANTER_PESSOA;
	}
	
	
	/**
	 * Método de Editar pessoas
	 * 
	 * @return
	 */
	public String comandoEditar() {
		
		
		return PATH_MANTER_PESSOA;
	}

	
	/**
	 * Método de excluir pessoas
	 * 
	 * @return
	 */
	public void comandoExcluir() {
		
		
	}

	
	/**
	 * Método de retorno para a lista de pessoas cadastradas
	 * 
	 * @return 
	 */
	public String comandoVoltar() {
		
		
		return PATH_LISTAR_PESSOAS;
	}
	
	
	/**
	 * Método de comando, que permite somente visualizar os dados
	 * 
	 */
	public void comandoVisualizar() {
		
		
	}
	
	
	/**
	 * Método de comando, que permite alterar do dados
	 * 
	 */
	public void comandoAlterar() {
		
		
	}
	
	
	
	/* ===================================
	 * 		Getters e Setters
	 * ===================================*/
	public PessoaDTO getFiltro() {
		if (filtro == null) {
			filtro = new PessoaDTO();
		}
		return filtro;
	}

	public void setFiltro(PessoaDTO filtro) {
		this.filtro = filtro;
	}

	public Pessoa getPessoa() {
		if (pessoa == null) {
			pessoa = new Pessoa();
		}
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}

	public List<Pessoa> getListaPessoas() {
		if (listaPessoas == null) {
			listaPessoas = new ArrayList<Pessoa>();
		}
		return listaPessoas;
	}

	public void setListaPessoas(List<Pessoa> listaPessoas) {
		this.listaPessoas = listaPessoas;
	}
	
}
